package consume.boot;


import com.alibaba.fastjson.JSON;
import com.rabbitmq.client.Channel;
import consume.entity.User;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;

import java.io.IOException;

/**
 * 这个交换机需要手动创建，创建了再打开注释
 */

//@Component
public class BootController {

    @RabbitListener(queues = {"boot-queue"})
    public void receive1(Message message,Channel channel){
        // 消息体
//        byte[] body = message.getBody();
        // 消息头属性信息
//        MessageProperties messageProperties = message.getMessageProperties();
//        System.out.println("boot-queue接收到用户名：  "+messageProperties);
//        Boolean redelivered = message.getMessageProperties().getRedelivered(); // 是否是重新发过来的消息
        User user = JSON.parseObject(message.getBody(), User.class);
        System.out.println("boot-queue接收到用户名：  "+ user.getUsername());
        // channel内按顺序自增
        long deliveryTag = message.getMessageProperties().getDeliveryTag();
        // 手动ACK
        try {
            // 第二个参数代表是否批量签收 false表示一个一签收
//            channel.basicAck(deliveryTag,false);
//            System.out.println("签收了:"+deliveryTag);
            // 第二个参数表示是否批量拒收 第三个参数表示拒收后是否丢回队列里去（为true这可能会导致死循环）
//            channel.basicReject(); //  也能拒收
            channel.basicNack(deliveryTag,false,false);
            System.out.println("拒收了:"+deliveryTag);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
